package com.itany.corejava.code16_反射;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author MissChen
 * @date 2024年03月26日 15:49
 */

// @Target注解的值如果只有一个，直接指定一个
// @Target(value=ElementType.FIELD)
// @Target(ElementType.FIELD)
// 如果注解中的值有多个，通过大括号来指定
// 有注解中,如果注解属性有且仅有value,那么value可以省略,直接写属性值
@Target({ElementType.FIELD,ElementType.METHOD,ElementType.TYPE})
@Retention(value= RetentionPolicy.RUNTIME)
public @interface SomeAnnotation {

    //定义注解属性时，每一个属性对应一个抽象方法
    // 虽然是抽象方法，但是我们认为它是属性的作用
    // 可以通过default为属性设置默认值
    // 当使用该注解时，如果没有为指定属性赋值，则使用默认值
    // 如果所有的注解都有默认值，在使用注解的时候可以不指定任何属性
    // 但是如果有任意一个属性没有设置默认值，在使用的时候必须指定对应属性的值

    String name() default "admin";
    String[] value() default {"hello","world"};
    int age() default 20;
}
